home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / lang / c / xw2.000 / xw2 / xw / csource / extensions.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-27  |  6.2 KB  |  250 lines

  1.  
  2. /* ================ EXTENSIONS.C =============================== */
  3.  
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <time.h>
  8.  
  9. #include "xbw.h"
  10.  
  11. /*{{{  Vereinfachungen*/
  12. #define Wdw XbWDDb_DbIWdw
  13. #define Obj XbWDDb_DbIObj
  14.  
  15. /*}}}  */
  16. /*{{{  Verwaltung der Handle-Tabelle*/
  17.  
  18. /* Handle-Tabelle */
  19. #define                     XbWDDb_MAXHANDLE 1000
  20. XbWDDb_Handle        Handle[XbWDDb_MAXHANDLE];     /* Handles fuer Variablen */
  21. int XbWVDb_NextFreeHandle=0;
  22.  
  23. /* Zugriffe auf DBK-Elemente (Variablen) ueber Handles */
  24. #define  SetString(a)   ((char*)XbWFDb_SetGetString( a,NULL,XbWDDb_Put))
  25. #define  GetString(a)   ((char*)XbWFDb_SetGetString( a,NULL,XbWDDb_Get))
  26.  
  27. void XbWPSy_GetNextHandle(int *handleno, char *list, char *grp, char *var, int mode){
  28.   int ii;
  29.   for (ii=0;ii<XbWDDb_MAXHANDLE;ii++){
  30.     if (Handle[ii]==-1){
  31.       if (*handleno >=0){ Handle[*handleno]=-1; };
  32.       Handle[ii]   = XbWFDb_GetHandle(list,grp,var,mode);
  33.       *handleno=ii;
  34.       return;
  35.       };
  36.     };
  37.   *handleno=-1;
  38.   };
  39.  
  40. void XbWPSy_InitHandles(void){
  41.   int ii;
  42.   for (ii=0;ii< XbWDDb_MAXHANDLE;ii++){
  43.     Handle[ii]=-1;
  44.     };
  45.   };
  46. /*}}}  */
  47. /*{{{  Verwaltung der Task-Tabelle*/
  48.  
  49.                      /* Fuer wenig zeitintensive Tasks,
  50.                         die laufen sollen, wenn XbW gerade nichts zu tun hat
  51.                         und einen Event vom XWindow bekommt. */
  52.  
  53. #define XbWDDb_MAXTASK 30
  54. typedef struct {
  55.  void (*TaskAdresse)( XbWDDb_DbIWdw  *TW);
  56.  } TaskTableE;
  57.  
  58. TaskTableE TaskTable[XbWDDb_MAXTASK];
  59.  
  60. int XbWPSy_SystemManagerHook( XbWDDb_DbIWdw  *TW){
  61.   int ii;
  62.   for (ii=0;ii<XbWDDb_MAXTASK;ii++){
  63.     if (TaskTable[ii].TaskAdresse != NULL){
  64.       (TaskTable[ii].TaskAdresse)(TW);
  65.       };
  66.     };
  67.   return(0);
  68.   };
  69.  
  70. int XbWPSy_SystemManagerHookInit(void){
  71.   int ii;
  72.   for (ii=0;ii<XbWDDb_MAXTASK;ii++){
  73.     TaskTable[ii].TaskAdresse=NULL;
  74.     };
  75.   return(0);
  76.   };
  77.  
  78. int XbWPSy_SystemManagerHookAdd(int *no, void *adr){
  79.   int ii;
  80.   for (ii=0;ii<XbWDDb_MAXTASK;ii++){
  81.     if (TaskTable[ii].TaskAdresse == NULL){
  82.       if (no >= 0){
  83.         TaskTable[*no].TaskAdresse=NULL;
  84.         };
  85.       TaskTable[ii].TaskAdresse=adr;
  86.       *no=ii;
  87.       return(ii);
  88.       };
  89.     };
  90.   *no=-1;
  91.   return(-1);
  92.   };
  93.  
  94.  
  95. /*}}}  */
  96. /*{{{  Verwaltung der Objekthooks*/
  97.  
  98. /* Tabelle der benutzerdefinierten Objektfunktionen */
  99. #define                             XbWDDb_MAXOBJECT 1000
  100. typedef struct {
  101.   int used;
  102.   char *EditTyp;
  103.   char *DispTyp;
  104.   int (*EditFuncAdresse)(
  105.       XbWDDb_DbIWdw  *TW, XbWDDb_DbIObj  *TO,
  106.       int *DisplayAfterEdit,
  107.       int ObjektMausXPosition, int ObjektMausYPosition);
  108.   int (*DispFuncAdresse)(
  109.       XbWDDb_DbIWdw  *TW,
  110.       XbWDDb_DbIObj  *TO);
  111.   } XbWDDb_UserObjectE;
  112.  
  113. XbWDDb_UserObjectE        UserObject[XbWDDb_MAXOBJECT];
  114.  
  115.  
  116. void XbWPSy_ObjectHookInit(void){
  117.   int ii;
  118.   for (ii=0;ii<XbWDDb_MAXOBJECT;ii++){
  119.     UserObject[ii].used=0;
  120.     };
  121.   };
  122.  
  123. void XbWPSy_AddObjectHook(int *hookno, char *edittyp, void *editfunc, char *disptyp, void *dispfunc){
  124.   int ii;
  125.   for (ii=0;ii<XbWDDb_MAXOBJECT;ii++){
  126.     if (UserObject[ii].used==0){
  127.       UserObject[ii].used=1;
  128.       UserObject[ii].EditTyp=edittyp;
  129.       UserObject[ii].DispTyp=disptyp;
  130.       UserObject[ii].EditFuncAdresse=editfunc;
  131.       UserObject[ii].DispFuncAdresse=dispfunc;
  132.       return;
  133.       };
  134.     };
  135.   };
  136.  
  137.  
  138. /* Hierhin springt das System, wenn es einen "@"-Objekttyp
  139.    findet.                                                     */
  140.  
  141.  
  142. int XbWPSy_EditObjectHook(
  143.       char *ObjectEditTyp,
  144.       XbWDDb_DbIWdw  *TW, XbWDDb_DbIObj  *TO,
  145.       int *DisplayAfterEdit,
  146.       int editmode,
  147.       int ObjektMausXPosition, int ObjektMausYPosition){
  148.   int ii;
  149.   int retval=XbWDMf_CommandErr;
  150.   XbWFOb_SetViewPort(TW,TO); /* Viewport auf Objekt einstellen */
  151.   *DisplayAfterEdit=0;
  152.   if (editmode!=XbWDOb_DrawRedBox){
  153.     for (ii=0;ii<XbWDDb_MAXOBJECT;ii++){
  154.       if (strcmp(ObjectEditTyp,UserObject[ii].EditTyp) == 0){
  155.         retval=(UserObject[ii].EditFuncAdresse)(TW,TO,DisplayAfterEdit,
  156.           ObjektMausXPosition,ObjektMausYPosition);
  157.         };
  158.       };
  159.     };
  160.   XbWFGr_ResPort();           /* Viewport zuruecksetzen        */
  161.   return(retval);
  162.   };
  163.  
  164.  
  165.  
  166. int  XbWPSy_DisplayObjectHook(
  167.     char *ObjectDispTyp,  XbWDDb_DbIWdw  *TW,
  168.                           XbWDDb_DbIObj  *TO){
  169.   int ii;
  170.   int retval=XbWDMf_CommandErr;
  171.   XbWFOb_SetViewPort(TW,TO); /* Viewport auf Objekt einstellen */
  172.   for (ii=0;ii<XbWDDb_MAXOBJECT;ii++){
  173.     if (strcmp(ObjectDispTyp,UserObject[ii].DispTyp) == 0){
  174.       retval=(UserObject[ii].DispFuncAdresse)(TW,TO);
  175.       };
  176.     };
  177.   XbWFGr_ResPort();           /* Viewport zuruecksetzen        */
  178.   return(retval);
  179.   };
  180.  
  181.  
  182.  
  183.  
  184. /*}}}  */
  185. /*{{{  Taskstart ausfuehren (Noch nicht fertig!)*/
  186.  
  187. /* Hierhin springt das System, wenn es eine Task starten soll. */
  188.  
  189.  
  190. int  XbWPSy_EXETaskStartHook(
  191.     char *TaskName        , XbWDDb_DbIWdw  *TW,
  192.     XbWDDb_DbIObj  *TO)    {
  193.   char sstr[200];
  194.   sprintf(sstr,"Internal task not found: %s\n",TaskName);
  195.   XbWFTb_Message(sstr);
  196. /*  return(XbWDMf_CommandOk); */
  197.   sprintf(sstr,"Trying to start up external task %s\n",TaskName);
  198.   XbWFTb_Message(sstr);
  199.   return(XbWDMf_EXETaskStart); /* jetzt wird statt dessen versucht, eine externe Task  */
  200.                                /* gleichen Namens zu starten */
  201.   };
  202.  
  203. /*}}}  */
  204.  
  205. /*{{{  Tabelle fuer Benutzerkommandos*/
  206.  
  207. typedef struct {
  208.   char name[30];
  209.   int (*function)(char *Command, XbWDDb_DbIWdw  *TW, void  *(*p)[], int (*t)[] );
  210.   } FuncTable;   /* KOMMANDO       WINDOW                PARAMETER          PARAMETERTYP */
  211.  
  212. #include "/xw/extensions/commands.c"
  213. /*{{{F /xw/extensions/commands.c*/
  214. /*:::F /xw/extensions/commands.c*/
  215. /*}}}  */
  216.  
  217. /*}}}  */
  218. /*{{{  int  XbWPSy_MetaCommandHook(*/
  219. int  XbWPSy_MetaCommandHook(
  220.     char *Command,
  221.     XbWDDb_DbIWdw  *TW,
  222.     void  *(*p)[], int (*t)[]){
  223.   int ii=0;
  224.   while(strlen(FunctionTable[ii].name)> 0){
  225.     if (strcmp(Command,FunctionTable[ii].name) == 0) {
  226.       if (FunctionTable[ii].function!=NULL){
  227.         return(FunctionTable[ii].function(Command,TW,p,t));
  228.         }
  229.       else {
  230.         return(XbWDMf_CommandErr);
  231.         };
  232.       };
  233.     ii++;
  234.     };
  235.   return(XbWDMf_CommandErr);
  236.   };
  237. /*}}}  */
  238.  
  239. /*{{{  Initialisierung*/
  240.  
  241. void XbWPSy_InitHooks(void){
  242.   XbWPSy_InitHandles();
  243.   XbWPSy_SystemManagerHookInit();
  244.   XbWPSy_ObjectHookInit();
  245.   };
  246.  
  247. /*}}}  */
  248.  
  249. /* ===== Ende EXTENSIONS.C ===============================ENDE= */
  250.